package gw.com.android.utils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.List;

public class TimeJudgeUtil {

    /**
     * 在西方文化中，一个星期的第一天，是"星期天"；第二天才是"星期一"，最后一天是"星期六"
     * 但是在我们这里，星期一就是第一天,现在转化一下
     *
     * @param dayOfWeek
     * @return
     */
    private static int getDayOfWeekLocal(int dayOfWeek) {
        switch (dayOfWeek) {
            case 1://西方的每周第1天，是我们所谓的星期天
                return 7;
            case 2://第2天，是我们的周一
                return 1;
            case 3://第3天，是我们的周二
                return 2;
            case 4://第4天，是我们的周三
                return 3;
            case 5://第5天，是我们的周四
                return 4;
            case 6://第6天，是我们的周五
                return 5;
            case 7://第7天，是我们的周六
                return 6;
            default://意外情况？报异常吧
                throw new RuntimeException("星期转化参数错误");
        }

    }


    /**
     * 我要写一个工具类
     * 判断当前时间是否在给定的时间之内
     * 具体举例：如果规定的时间是 周六 06:00:00到周一06:59:59
     * 此方法只针对，时间段指定为星期几 到 星期几的某个时间段内
     *
     * @param range
     * @return
     */
    public static boolean ifTimeInside(List<String[]> range) {
        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
        Calendar calendar = Calendar.getInstance();
        int dayOfWeek = getDayOfWeekLocal(calendar.get(Calendar.DAY_OF_WEEK));//这是经过了转化的星期值，值为1，就是星期一，以此往后类推
        int hour = calendar.get(Calendar.HOUR_OF_DAY);
        int minute = calendar.get(Calendar.MINUTE);
        int second = calendar.get(Calendar.SECOND);

        String nowTimeStr = hour + ":" + minute + ":" + second;

        for (int i = 0; i < range.size(); i++) {
            String dayOfWeek_ = range.get(i)[0];
            String startTimeOfDay = range.get(i)[1];
            String endTimeOfDay = range.get(i)[2];
            try {
                if (dayOfWeek == Integer.parseInt(dayOfWeek_)) {//如果星期，对等,才进行逻辑判断

                    long dStart = sdf.parse(startTimeOfDay).getTime();//周六 的 17:45:00 至 周六 的 23:59:59
                    long dEnd = sdf.parse(endTimeOfDay).getTime();
                    long nowD = sdf.parse(nowTimeStr).getTime();
                    if (nowD >= dStart && nowD <= dEnd) {//只要发现当前时间在给定的时间范围之内，就返回true，结束循环
                        return true;
                    }
                }
            } catch (ParseException e) {
                e.printStackTrace();
                return false;
            } catch (NumberFormatException e) {
                e.printStackTrace();
                throw e;
            }
        }

        return false;//如果结束循环扔未找到，就返回false
    }
}
